Sub stapni_sustavi_pomaci()
'
' stapni_sustavi Macro
' Macro recorded 12.11.2009 by gf-harapin
'

Dim br_stapova As Integer
Dim br_cvorova As Integer
Dim br_geom As Integer
Dim br_mat As Integer
Dim str As String

Dim line As Integer

' -------------------------------------------------------
' Polja vezana za cvorove
' -------------------------------------------------------
Dim cvor_coord(1000, 2) As Double
Dim cvor_pridr(1000, 3) As Integer

' -------------------------------------------------------
' Polja vezana za stapove
' -------------------------------------------------------
Dim stap_cvor(300, 2) As Integer
Dim stap_mat(300) As Integer
Dim stap_geom(300) As Integer
Dim stap_duz(300) As Double
Dim stap_kut(300) As Double
'Dim stap_otp(330, 6) As Integer

' -------------------------------------------------------
' Polja vezana za materijal
' -------------------------------------------------------
Dim mat_kar(10, 2) As Double

' -------------------------------------------------------
' Polja vezana za geometriju
' -------------------------------------------------------
Dim geom_kar(10, 2) As Double

' -------------------------------------------------------
' Ucitaj osnovne podatke modela
' -------------------------------------------------------
br_stapova = Sheets("Ulazni podaci").Cells(2, 2)
br_cvorova = Sheets("Ulazni podaci").Cells(1, 2)
br_mat = Sheets("Ulazni podaci").Cells(4, 2)
br_geom = Sheets("Ulazni podaci").Cells(3, 2)

If (br_cvorova * 3 > 48) Then
    Response = MsgBox("Preveliki broj cvorova!", vbOKOnly, "Upozorenje")
    End
  End If
' -------------------------------------------------------
' Ucitaj podatke o cvorovima modela
' -------------------------------------------------------
line = 7
 For i = 1 To br_cvorova
  icvor = Sheets("Ulazni podaci").Cells(line, 1)
  cvor_coord(icvor, 1) = Sheets("Ulazni podaci").Cells(line, 2)
  cvor_coord(icvor, 2) = Sheets("Ulazni podaci").Cells(line, 3)
  cvor_pridr(icvor, 1) = Sheets("Ulazni podaci").Cells(line, 4)
  cvor_pridr(icvor, 2) = Sheets("Ulazni podaci").Cells(line, 5)
  cvor_pridr(icvor, 3) = Sheets("Ulazni podaci").Cells(line, 6)
  line = line + 1
Next i

' -------------------------------------------------------
' Ucitaj podatke o stapovima modela
' -------------------------------------------------------
line = line + 2
 For i = 1 To br_stapova
  istap = Sheets("Ulazni podaci").Cells(line, 1)
  stap_cvor(istap, 1) = Sheets("Ulazni podaci").Cells(line, 2)
  stap_cvor(istap, 2) = Sheets("Ulazni podaci").Cells(line, 3)
  stap_mat(istap) = Sheets("Ulazni podaci").Cells(line, 4)
  stap_geom(istap) = Sheets("Ulazni podaci").Cells(line, 5)
  Sheets("Ulazni podaci").Cells(line, 6) = cvor_coord(stap_cvor(istap, 1), 1)
  Sheets("Ulazni podaci").Cells(line, 7) = cvor_coord(stap_cvor(istap, 1), 2)
  Sheets("Ulazni podaci").Cells(line, 8) = cvor_coord(stap_cvor(istap, 2), 1)
  Sheets("Ulazni podaci").Cells(line, 9) = cvor_coord(stap_cvor(istap, 2), 2)
  stap_duz(istap) = Sheets("Ulazni podaci").Cells(line, 10)
  stap_kut(istap) = Sheets("Ulazni podaci").Cells(line, 11)
  line = line + 1
Next i

' -------------------------------------------------------
' Ucitaj podatke o materijalima modela
' -------------------------------------------------------
line = line + 2
 For i = 1 To br_mat
  imat = Sheets("Ulazni podaci").Cells(line, 1)
  mat_kar(imat, 1) = Sheets("Ulazni podaci").Cells(line, 2)
  mat_kar(imat, 2) = Sheets("Ulazni podaci").Cells(line, 3)
  line = line + 1
Next i

' -------------------------------------------------------
' Ucitaj podatke o geometriji modela
' -------------------------------------------------------
line = line + 2
 For i = 1 To br_geom
  imat = Sheets("Ulazni podaci").Cells(line, 1)
  geom_kar(imat, 1) = Sheets("Ulazni podaci").Cells(line, 4)
  geom_kar(imat, 2) = Sheets("Ulazni podaci").Cells(line, 5)
  line = line + 1
Next i


' -------------------------------------------------------
' Formiraj matrice krutosti elemenata
' -------------------------------------------------------

 Worksheets("El-kr").Activate
 Worksheets("El-kr").Range("A1:IV36000").Clear
 For istap = 1 To br_stapova
  line = (istap - 1) * 7 + 2
  stup = 1
    imat = stap_mat(istap)
    igeom = stap_geom(istap)
    E = mat_kar(imat, 1)
    A = geom_kar(igeom, 1)
    II = geom_kar(igeom, 2)
    L = stap_duz(istap)
    alfa = stap_kut(istap)

     For j = 1 To 6
       For k = 1 To 6
         Sheets("El-kr").Cells(line + j, stup + k) = 0
        Next k
      Next j
  
  Sheets("El-kr").Cells(line + 1, stup + 1) = E * A / L
  Sheets("El-kr").Cells(line + 1, stup + 4) = -E * A / L
  Sheets("El-kr").Cells(line + 4, stup + 1) = -E * A / L
  Sheets("El-kr").Cells(line + 4, stup + 4) = E * A / L
  
  Sheets("El-kr").Cells(line + 2, stup + 2) = 12 * E * II / (L * L * L)
  Sheets("El-kr").Cells(line + 2, stup + 5) = -12 * E * II / (L * L * L)
  Sheets("El-kr").Cells(line + 5, stup + 2) = -12 * E * II / (L * L * L)
  Sheets("El-kr").Cells(line + 5, stup + 5) = 12 * E * II / (L * L * L)
  
  Sheets("El-kr").Cells(line + 2, stup + 3) = 6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 2, stup + 6) = 6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 3, stup + 2) = 6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 6, stup + 2) = 6 * E * II / (L * L)
  
  Sheets("El-kr").Cells(line + 3, stup + 5) = -6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 5, stup + 3) = -6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 5, stup + 6) = -6 * E * II / (L * L)
  Sheets("El-kr").Cells(line + 6, stup + 5) = -6 * E * II / (L * L)
  
  Sheets("El-kr").Cells(line + 3, stup + 3) = 4 * E * II / (L)
  Sheets("El-kr").Cells(line + 3, stup + 6) = 2 * E * II / (L)
  Sheets("El-kr").Cells(line + 6, stup + 3) = 2 * E * II / (L)
  Sheets("El-kr").Cells(line + 6, stup + 6) = 4 * E * II / (L)

  Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select
  Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6)
'
' -------------------------------------------------------
' matrica transformacije
' -------------------------------------------------------
  stup = stup + 7
     For j = 1 To 6
       For k = 1 To 6
         Sheets("El-kr").Cells(line + j, stup + k) = 0
        Next k
      Next j
  
  Sheets("El-kr").Cells(line + 1, stup + 1) = Cos(alfa)
  Sheets("El-kr").Cells(line + 1, stup + 2) = Sin(alfa)
  Sheets("El-kr").Cells(line + 2, stup + 1) = -Sin(alfa)
  Sheets("El-kr").Cells(line + 2, stup + 2) = Cos(alfa)
  Sheets("El-kr").Cells(line + 3, stup + 3) = 1
  Sheets("El-kr").Cells(line + 4, stup + 4) = Cos(alfa)
  Sheets("El-kr").Cells(line + 4, stup + 5) = Sin(alfa)
  Sheets("El-kr").Cells(line + 5, stup + 4) = -Sin(alfa)
  Sheets("El-kr").Cells(line + 5, stup + 5) = Cos(alfa)
  Sheets("El-kr").Cells(line + 6, stup + 6) = 1
  
  Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select
  Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6)
'
' -------------------------------------------------------
' Prebacivanje matrice u globalni koordinatni sustav
' -------------------------------------------------------
  stup = stup + 7
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select
    Selection.FormulaArray = "=MMULT(TRANSPOSE(RC[-7]:R[5]C[-2]),MMULT(RC[-14]:R[5]C[-9],RC[-7]:R[5]C[-2]))"
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6)
Next istap
'
'
' -------------------------------------------------------
' Ponistavanje globalne matrice krutosti
' -------------------------------------------------------
 Worksheets("Gl-kr").Activate
 Worksheets("Gl-kr").Range("A1:IV36000").Clear
'  line = 1
'  stup = 1
'      For j = 1 To (br_cvorova * 3)
'       For k = 1 To (br_cvorova * 3)
'         Sheets("Gl-kr").Cells(line + j, stup + k) = 0
'        Next k
'      Next j

  Sheets("Gl-kr").Range(Cells(2, 2), Cells(1 + br_cvorova * 3, 1 + br_cvorova * 3)).Value = 0
'
' -------------------------------------------------------
' Slaganje elementnih matrica u globalnu matricu krutosti
' -------------------------------------------------------
For istap = 1 To br_stapova
'
' Prva podmatrica (gore lijevo)
  line = (istap - 1) * 7 + 2
  stup = 15
  c1 = stap_cvor(istap, 1)
  c2 = stap_cvor(istap, 2)
  line_g = (c1 - 1) * 3 + 1
  stup_g = (c1 - 1) * 3 + 1
      For j = 1 To 3
       For k = 1 To 3
         Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k)
        Next k
      Next j
'
' Druga podmatrica (gore desno)
  line = (istap - 1) * 7 + 2
  stup = 18
  c1 = stap_cvor(istap, 1)
  c2 = stap_cvor(istap, 2)
  line_g = (c1 - 1) * 3 + 1
  stup_g = (c2 - 1) * 3 + 1
      For j = 1 To 3
       For k = 1 To 3
         Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k)
        Next k
      Next j
'
' Druga podmatrica (dole lijevo)
  line = (istap - 1) * 7 + 5
  stup = 15
  c1 = stap_cvor(istap, 1)
  c2 = stap_cvor(istap, 2)
  line_g = (c2 - 1) * 3 + 1
  stup_g = (c1 - 1) * 3 + 1
      For j = 1 To 3
       For k = 1 To 3
         Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k)
        Next k
      Next j
'
' Druga podmatrica (dole desno)
  line = (istap - 1) * 7 + 5
  stup = 18
  c1 = stap_cvor(istap, 1)
  c2 = stap_cvor(istap, 2)
  line_g = (c2 - 1) * 3 + 1
  stup_g = (c2 - 1) * 3 + 1
      For j = 1 To 3
       For k = 1 To 3
         Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k)
        Next k
      Next j
      
Next istap
Sheets("Gl-kr").Range(Cells(2, 2), Cells(1 + br_cvorova * 3, 1 + br_cvorova * 3)).BorderAround (6)

'
' -------------------------------------------------------
' Prepisivanje globalne matrice krutosti (prije uvrstenja RU)
' -------------------------------------------------------
  line = 1
  stup = 1
  line_g = (br_cvorova * 3) + 2
      For j = 1 To (br_cvorova * 3)
       For k = 1 To (br_cvorova * 3)
         Sheets("Gl-kr").Cells(line_g + j, stup + k) = Sheets("Gl-kr").Cells(line + j, stup + k)
        Next k
      Next j

Sheets("Gl-kr").Range(Cells(line_g + 1, 2), Cells(line_g + br_cvorova * 3, 1 + br_cvorova * 3)).BorderAround (6)
'
' -------------------------------------------------------
' Uvrstavanje Rubnih Uvjeta
' -------------------------------------------------------
    For icvor = 1 To br_cvorova
    For iprd = 1 To 3
    If (cvor_pridr(icvor, iprd)) = 1 Then
      For j = 1 To (br_cvorova * 3)
         Sheets("Gl-kr").Cells(line_g + (icvor - 1) * 3 + iprd, j + 1) = 0
         Sheets("Gl-kr").Cells(line_g + j, (icvor - 1) * 3 + iprd + 1) = 0
      Next j
     Sheets("Gl-kr").Cells(line_g + (icvor - 1) * 3 + iprd, (icvor - 1) * 3 + iprd + 1) = 1
    End If
  Next iprd
 Next icvor
'
' -------------------------------------------------------
' Izracunavanje K-1
' -------------------------------------------------------
'
    line_g = (br_cvorova * 3) * 2 + 3
    Range(Cells(line_g + 1, 2), Cells(line_g + br_cvorova * 3, 1 + br_cvorova * 3)).Select
    str = "=MINVERSE(R[" + CStr(-br_cvorova * 3 - 1) + "]C:R[" + CStr(-2) + "]C[" + CStr(br_cvorova * 3 - 1) + "])"
    Selection.FormulaArray = str
    Selection.BorderAround (6)
'
' -------------------------------------------------------
' Postavi sve sile u cvorovima na 0.00
' -------------------------------------------------------
    line_g = (br_cvorova * 3) * 2 + 3
    stup_g = (br_cvorova * 3) + 3
    For icvor = 1 To br_cvorova
    For j = 1 To 3
      ipos = (icvor - 1) * 3 + j
      Sheets("Gl-kr").Cells(line_g + ipos, stup_g) = 0
       If (j = 1) Then str = "Fx-" + CStr(icvor)
       If (j = 2) Then str = "Fy-" + CStr(icvor)
       If (j = 3) Then str = "M-" + CStr(icvor)
      Sheets("Gl-kr").Cells(line_g + ipos, stup_g - 1) = str
      Next j
    Next icvor
    Range(Cells(line_g + 1, stup_g), Cells(line_g + br_cvorova * 3, stup_g)).Select
    Selection.BorderAround (6)
'
' -------------------------------------------------------
' Izracunaj pomake
' -------------------------------------------------------
    line_g = (br_cvorova * 3) * 2 + 3
    Range(Cells(line_g + 1, stup_g + 2), Cells(line_g + br_cvorova * 3, stup_g + 2)).Select
    str = "=MMULT(RC[" + CStr(-br_cvorova * 3 - 3) + "]:R[" + CStr(br_cvorova * 3 - 1) + "]C[" + CStr(-4) + "],RC[" + CStr(-2) + "]:R[" + CStr(br_cvorova * 3 - 1) + "]C[" + CStr(-2) + "])"
    Selection.FormulaArray = str
    Selection.BorderAround (6)
    
 End Sub





   
Sub stapni_sustavi_sile()
    
Dim stap_cvor(300, 2) As Integer

' -------------------------------------------------------
' Ucitaj ponovno osnovne podatke modela
' -------------------------------------------------------
br_stapova = Sheets("Ulazni podaci").Cells(2, 2)
br_cvorova = Sheets("Ulazni podaci").Cells(1, 2)

' -------------------------------------------------------
' Ucitaj ponovno podatke o stapovima modela
' -------------------------------------------------------
line = 6 + br_cvorova + 3
 For i = 1 To br_stapova
  istap = Sheets("Ulazni podaci").Cells(line, 1)
  stap_cvor(istap, 1) = Sheets("Ulazni podaci").Cells(line, 2)
  stap_cvor(istap, 2) = Sheets("Ulazni podaci").Cells(line, 3)
  line = line + 1
 Next i
'
' -------------------------------------------------------
' Postavi pomake kod lokalnih matrica (pazi na cvorove)
' -------------------------------------------------------
 Worksheets("El-kr").Activate
stup_g = (br_cvorova * 3) + 3
 For istap = 1 To br_stapova
  line = (istap - 1) * 7 + 2
  stup = 22
    i1 = stap_cvor(istap, 1)
    i2 = stap_cvor(istap, 2)

    line_g = (br_cvorova * 3) * 2 + 3
    Cells(line + 1, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 1, stup_g + 2).Value
    Cells(line + 2, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 2, stup_g + 2).Value
    Cells(line + 3, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 3, stup_g + 2).Value
    Cells(line + 4, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 1, stup_g + 2).Value
    Cells(line + 5, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 2, stup_g + 2).Value
    Cells(line + 6, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 3, stup_g + 2).Value
    
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6)
Next istap
'
' -------------------------------------------------------
' Rotiraj pomake u lokalni koordinatni sustav
' -------------------------------------------------------
 For istap = 1 To br_stapova
  line = (istap - 1) * 7 + 2
  stup = 24
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).Select
    Selection.FormulaArray = "=MMULT(RC[-16]:R[5]C[-11],RC[-2]:R[5]C[-2])"
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6)
Next istap

'
' -------------------------------------------------------
' Pomnozi K-loc * u
' -------------------------------------------------------
 For istap = 1 To br_stapova
  line = (istap - 1) * 7 + 2
  stup = 26
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).Select
    Selection.FormulaArray = "=MMULT(RC[-25]:R[5]C[-20],RC[-2]:R[5]C[-2])"
    Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6)
Next istap


End Sub